"""
    Python中数学相关模块，如下所示
    math        提供了对 C 标准定义的数学函数的访问（不适用于复数）
    cmath       提供了一些关于复数的数学函数
    decimal     为快速正确舍入的十进制浮点运算提供支持
    fractions   为分数运算提供支持
    random      实现各种分布的伪随机数生成器
    statistics 提供了用于计算数字数据的数理统计量的函数

    本文学习math、decimal和random
"""
import math

# 打印math模块的包含内容
print(dir(math))
print(math.__doc__)

# ceil(x) 返回x的上限，即大于或者等于x的最小整数。
x = -1.5
print(math.ceil(x)) # -1

print(math.floor(x)) # -2

# 绝对值
print(math.fabs(x)) # 1.5

# 取模，余数,结果是浮点型
print(math.fmod(3,2))

# 次幂
print(math.pow(3,2))

# 返回迭代器中所有元素的和
print(math.fsum((1,2,3,4,5)))

# ... 略 正余弦 对数 e次幂 trunc 返回整数部分
# x的平方根 gcd 求两个数的最大公约数

# decimal模块
import decimal

decimal.getcontext().prec = 5
print(decimal.Decimal(1.1) + decimal.Decimal(0.2))


# random模块
# random模块可以生成随机数，我们可以看一下其常用函数
import random

# 返回[0.0, 1.0) 范围内的一个随机浮点数。看下示例：
print(random.random())

# uniform(a, b) 返回[a, b) 范围内的一个随机浮点数
print(random.uniform(1.1,9.9))

# 返回[a, b] 范围内的一个随机整数。看下示例：
print(random.randint(1, 10))

# randrange(start, stop[, step]) 返回[start, stop) 范围内步长为 step 的一个随机整数。看下示例：
print(random.randrange(1, 10, 2))

# choice(seq)
# 从非空序列 seq 返回一个随机元素。 看下示例：
print(random.choice('123465'))

# shuffle(x[, random])
# 将序列x 随机打乱位置。看下示例：
l = [1,2,3,4,5,6]
random.shuffle(l)
print(l)

# sample(population, k) 返回从总体序列或集合中选择的唯一元素的 k 长度列表，用于无重复的随机抽样。看下示例：
l = [1,2,3,4,5,6]
print(random.sample(l, 3)) # 随机无重复地抽取k个元素
